1469E - A Bit Similar - CodeForces Solution


bitmasks brute force hashing string suffix structures strings two pointers *2400

Please click on ads to support us..

C++ Code:

#include <iostream>
#include <cstdio>
using namespace std;
typedef long long LL;

const int N = 1000010, P = 1e9 + 7;
int n, k;
char s[N];
int w[N], one[N];
LL h[N], pre[N];
bool st[N];

LL hashy(int l, int r)
{
    return (pre[r] - pre[l-1] * h[r-l+1]%P+P)%P;
}

void solve()
{
    scanf("%d%d%s", &n, &k, s + 1);
    for(int i = 0; i <= n + 1; i++) st[i] = 0;
    
    for(int i = 1; i <= n; i++)
    {
        w[i] = s[i] == '0';
        pre[i] = (pre[i-1]*2+w[i])%P;
        one[i] = one[i-1]+w[i];
    }
    
    for(int i = 1; i <= n - k + 1; i++)
    {
        int x = hashy(max(i, i + k - 20), i + k - 1);
        if(k > 20 && one[i+k-20]-one[i-1] > 0 || x > n) continue;
        st[x] = 1;
    }
    
    int v = -1, d = min(k, 21);
    for(int i = 0; i < 1<<d; i++)
        if(!st[i])
        {
            v = i;
            break;
        }
    
    if(v == -1) puts("NO");
    else
    {
        string ans = "";
        printf ("YES\n");
           for(int i = 0;i <= k; i ++) ans += '0';
           for(int i = 20;i >= 0;i --){
               if((v >> i) & 1) ans += '1';
               else ans += '0';
           }
           cout<<ans.substr(ans.size() - k,ans.size())<<endl;
    }
}

int main()
{
    h[0] = 1;
    for(int i = 1; i <= 30; i++)    h[i] = h[i-1]*2%P;
    int T;
    scanf("%d", &T);
    while(T--)  solve();
    return 0;
}


Comments

Submit
0 Comments
More Questions

1452A - Robot Program
344A - Magnets
96A - Football
702B - Powers of Two
1036A - Function Height
443A - Anton and Letters
1478B - Nezzar and Lucky Number
228A - Is your horseshoe on the other hoof
122A - Lucky Division
1611C - Polycarp Recovers the Permutation
432A - Choosing Teams
758A - Holiday Of Equality
1650C - Weight of the System of Nested Segments
1097A - Gennady and a Card Game
248A - Cupboards
1641A - Great Sequence
1537A - Arithmetic Array
1370A - Maximum GCD
149A - Business trip
34A - Reconnaissance 2
59A - Word
462B - Appleman and Card Game
1560C - Infinity Table
1605C - Dominant Character
1399A - Remove Smallest
208A - Dubstep
1581A - CQXYM Count Permutations
337A - Puzzles
495A - Digital Counter
796A - Buying A House